package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysFloor;
import com.ruoyi.system.mapper.SysFloorMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.TenantInfoMapper;
import com.ruoyi.system.domain.TenantInfo;
import com.ruoyi.system.service.ITenantInfoService;
import com.ruoyi.common.core.text.Convert;

/**
 * 租户管理Service业务层处理
 * 
 * @author sux
 * @date 2021-06-27
 */
@Service
public class TenantInfoServiceImpl implements ITenantInfoService 
{
    @Autowired
    private TenantInfoMapper tenantInfoMapper;

    @Autowired
    private SysFloorMapper sysFloorMapper;

    @Override
    public List<TenantInfo> selectAllTenantInfo() {
        return tenantInfoMapper.selectAllTenantInfo();
    }

    /**
     * 查询租户管理
     * 
     * @param tenantId 租户管理ID
     * @return 租户管理
     */
    @Override
    public TenantInfo selectTenantInfoById(String tenantId)
    {
        return tenantInfoMapper.selectTenantInfoById(tenantId);
    }

    /**
     * 查询租户管理列表
     * 
     * @param tenantInfo 租户管理
     * @return 租户管理
     */
    @Override
    public List<TenantInfo> selectTenantInfoList(TenantInfo tenantInfo)
    {
        return tenantInfoMapper.selectTenantInfoList(tenantInfo);
    }

    /**
     * 查询租户管理列表
     *
     * @param tanantIds 租户id集合
     * @return 租户管理集合
     */
    @Override
    public List<TenantInfo> selectTenantInfoListByIds(String[] tanantIds){
        return tenantInfoMapper.selectTenantInfoByIds(tanantIds);
    }

    /**
     * 新增租户管理
     * 
     * @param tenantInfo 租户管理
     * @return 结果
     */
    @Override
    public int insertTenantInfo(TenantInfo tenantInfo)
    {
        tenantInfo.setCreateTime(DateUtils.getNowDate());
        tenantInfo.setTenantId(UUID.randomUUID().toString().replaceAll("-", ""));
        return tenantInfoMapper.insertTenantInfo(tenantInfo);
    }

    /**
     * 修改租户管理
     * 
     * @param tenantInfo 租户管理
     * @return 结果
     */
    @Override
    public int updateTenantInfo(TenantInfo tenantInfo)
    {
        tenantInfo.setUpdateTime(DateUtils.getNowDate());
        return tenantInfoMapper.updateTenantInfo(tenantInfo);
    }

    /**
     * 删除租户管理对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteTenantInfoByIds(String ids)
    {
        return tenantInfoMapper.deleteTenantInfoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除租户管理信息
     * 
     * @param tenantId 租户管理ID
     * @return 结果
     */
    @Override
    public int deleteTenantInfoById(String tenantId)
    {
        return tenantInfoMapper.deleteTenantInfoById(tenantId);
    }

    /**
     *校验Excel数据是否满足条件
     *
     * @param lists
     * @return
     */
    @Override
    public String validateDatas(List<TenantInfo> lists) {
        StringBuilder sb =new StringBuilder();
        List<SysFloor> floorList =sysFloorMapper.selectSysFloorList(new SysFloor());
        List<String> floorNameList =new ArrayList<String>();
        String floorNameTemp;
        for (int i=0;i<floorList.size();i++){
            floorNameTemp = floorList.get(i).getFloorName();
            floorNameList.add(floorNameTemp);
        }
        if (StringUtils.isEmpty(lists)){
            sb.append("execel中无任何数据，请认证填写！");
        }else {
            for (int i = 0; i <lists.size() ; i++) {
                if(StringUtils.isBlank(lists.get(i).getTenantName())){
                    sb.append("第"+(i+2)+"行"+"、姓名不符合标准！<br/>");
                }
                if(!floorNameList.contains(lists.get(i).getTenantFloor())){
                    sb.append("第"+(i+2)+"行"+"、楼层名称不符合标准名称！<br/>");
                }
//                if (StringUtils.isBlank(lists.get(i))){
//                    sb.append("第"+(i+2)+"行"+"、证件号不符合标准！<br/>");
//                }
            }
        }
        if (sb.length()>0){
            return sb.toString();
        };
        return "";
    }

    /**
     * 导入员工合同关系
     * @param lists
     * @param updateSupport
     * @param sysUser
     * @return
     */
    @Override
    public String importRelations(List<TenantInfo> lists, boolean updateSupport, SysUser sysUser) {
        int successNum = 0;
        int failureNum = 0;
        StringBuffer successMsg = new StringBuffer();
        StringBuffer failureMsg = new StringBuffer();
        tenantInfoMapper.removeAllTenant();
        for (TenantInfo sb:lists){
            sb.setTenantId(UUID.randomUUID().toString().replaceAll("-", ""));
            try {
                tenantInfoMapper.insertTenantInfo(sb);
                successNum++;
                successMsg.append("<br/>"+successNum+"、"+sb.getTenantId()+"导入成功");
            }catch (Exception e){
                failureNum ++;
                failureMsg.append("<br/>"+failureNum+"、导入失败");
            }
        }
        if(failureNum > 0){
            failureMsg.insert(0, "很抱歉，导入失败！共"+failureNum+"条数据格式不正确，错误如下：");
            throw new BusinessException(failureMsg.toString());
        }else {
            successMsg.insert(0, "恭喜您数据已全部导入成功！共"+ successNum +"条，数据如下：");
        }
        return successMsg.toString();
    }

    @Override
    public Double selectSumFloorArea(String floorName) {
        return tenantInfoMapper.selectSumFloorArea(floorName);
    }

}
